
package xmlParser;
import java.util.HashSet;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;

public class AnnotationContentHandler implements ContentHandler {

  private Annotation annotation;
  public HashSet<Annotation> annotations = new HashSet<Annotation>();
  //private String currentValue;
  private Boolean annotationFound = false;


  // Aktuelle Zeichen die gelesen werden, werden in eine Zwischenvariable
  // gespeichert
  public void characters(char[] ch, int start, int length)
      throws SAXException {
    //currentValue = new String(ch, start, length);
  }

  // Methode wird aufgerufen wenn der Parser zu einem Start-Tag kommt
  public void startElement(String uri, String localName, String qName,
      Attributes atts) throws SAXException {
	  if (localName.equals("annotation")) {
      // Neue Annotation erzeugen
      annotation = new Annotation();
      annotationFound = true;

      // Attribut id wird in einen Integer umgewandelt und dann zu der
      // jeweiligen Annotation gesetzt
      annotation.setWeight(Double.parseDouble(atts.getValue("weight")));
      annotation.setEntityId(Integer.parseInt(atts.getValue("entityId")));
      annotation.setDisplayName(atts.getValue("displayName"));
     }
	  
	  if (annotationFound == true && localName.equals("description")){
		  annotation.setLang(atts.getValue("lang"));
	    	annotation.setUrl(atts.getValue("URL"));
	  }
  }

  // Methode wird aufgerufen wenn der Parser zu einem End-Tag kommt
  public void endElement(String uri, String localName, String qName)
      throws SAXException {

    // Name setzen
    //if (localName.equals("description")) {
    	
    //}

    // Annotation in Liste abspeichern falls Annotation End-Tag erreicht
    // wurde.
    if (localName.equals("annotation")) {
      annotations.add(annotation);
      annotationFound = false;
      //System.out.println(annotation);
    }
  }
  
  public HashSet<Annotation> getAnnotationList() {
	  return annotations;
  }

  public void endDocument() throws SAXException {}
  public void endPrefixMapping(String prefix) throws SAXException {}
  public void ignorableWhitespace(char[] ch, int start, int length)
      throws SAXException {}
  public void processingInstruction(String target, String data)
      throws SAXException {}
  public void setDocumentLocator(Locator locator) {  }
  public void skippedEntity(String name) throws SAXException {}
  public void startDocument() throws SAXException {}
  public void startPrefixMapping(String prefix, String uri)
    throws SAXException {}
}